home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 126-150 / disk_128 / mrbackup / daterequest.c < prev    next >
C/C++ Source or Header  |  1992-05-06  |  22KB  |  757 lines

  1. /* Date Requester Package
  2.  * Author:        Mark R. Rinfret
  3.  * Description:
  4.  *        This source file contains a canned date requester routine which
  5.  * supports time and date entry in MM/DD/YY HH:MM:SS notation (time is
  6.  * optional) to a DateStamp structure.  This package is dependent upon
  7.  * the package "MRDates.c" (same author) for DateStamp/string conversions.
  8.  *
  9.  * History:        (most recent change first)
  10.  *
  11.  * 08/18/87 -MRR- Added up/down arrows to gadgetry
  12.  * 07/20/87 -MRR- Created this file.
  13.  */
  14.  
  15.  
  16. #include <intuition/intuition.h> 
  17. #include <intuition/intuitionbase.h> 
  18. #include <libraries/dosextens.h> 
  19. #include <graphics/gfxbase.h> 
  20. #include <graphics/gfx.h> 
  21. #include <graphics/display.h> 
  22.  
  23. #include <graphics/text.h> 
  24. #include <functions.h>
  25.  
  26. #include <ctype.h> 
  27. #include <MRDates.h>
  28.  
  29. #define DATEREQWIDTH    260
  30. #define DATEREQHEIGHT    80
  31.  
  32. /**********************************************************************
  33.  *                    Gadget Structure Definitions
  34.  * 
  35.  * Some of the following structures were defined using EGAD! 
  36.  * (by the Programmer's Network) and further modified by the author.
  37.  * 
  38.  **********************************************************************/
  39.  
  40. /*  Gadget ID Definitions */
  41.  
  42. #define DATEGAD         0
  43. #define UPMONTHGAD        1
  44. #define UPDAYGAD        2    
  45. #define UPYEARGAD        3
  46. #define UPHOURGAD        4
  47. #define UPMINGAD        5
  48. #define UPSECGAD        6
  49. #define DOWNMONTHGAD    7
  50. #define DOWNDAYGAD        8
  51. #define DOWNYEARGAD        9
  52. #define DOWNHOURGAD        10
  53. #define DOWNMINGAD        11
  54. #define DOWNSECGAD        12
  55. #define NOWGAD            13
  56. #define OKGAD            14
  57.  
  58. /**********************************************************************
  59.  *  Text attribute structures used in rendering IntuiTexts
  60.  **********************************************************************/
  61.  
  62.  
  63. static char def_font[] ="topaz.font";
  64.  
  65. static struct TextAttr TxtAt_Plain = { 
  66.     (UBYTE *)def_font, 8, FS_NORMAL, FPF_ROMFONT
  67.     };
  68.  
  69.  
  70.  
  71.  
  72. /**********************************************************************
  73.  *  String information for the dategad string gadget.
  74.  **********************************************************************/
  75.  
  76. static UBYTE dategad_sbuf_1[19] = "00/00/00 00:00:00";
  77. static UBYTE dategad_ubuf_1[19];
  78.  
  79. static struct StringInfo dategad_txstr_1 = {
  80.   dategad_sbuf_1, dategad_ubuf_1,     /* Buffer, UndoBuffer  */
  81.   0, 18, 0,                          /* BufferPos, MaxChars, DispPos   */
  82.   0, 18,                              /* UndoPos, NumChars */
  83.   0, 0, 0,                          /* DispCount, CLeft, CTop */
  84.   0x0, 0,                           /* LayerPtr, LongInt */
  85.   0x0                                /* AltKeyMap */
  86. };
  87.  
  88.  
  89. /**********************************************************************
  90.  *  Gadget Structure definition for the dategad gadget.
  91.  **********************************************************************/
  92.  
  93. static struct Gadget dategad = {
  94.   NULL,     /* NextGadget pointer */
  95.   64, 50,    /* LeftEdge, TopEdge  */
  96.   8 * 17,                        /* Width (8 pixels * 17 characters) */
  97.   8,                            /* Height      */
  98.    GADGHCOMP,                     /* Gadget Flags */
  99.     RELVERIFY ,                 /* Activation Flags */
  100.   REQGADGET | STRGADGET,         /* GadgetType */
  101.     NULL,                        /* GadgetRender - no border */
  102.   NULL,                            /* SelectRender */
  103.    NULL,                        /* GadgetText */
  104.   0x0,                            /* MutualExclude */
  105.   (APTR)&dategad_txstr_1,       /* SpecialInfo */
  106.   DATEGAD,                        /* GadgetID */
  107.   NULL                            /* UserData Pointer */
  108. };
  109.  
  110. static struct IntuiText nowtext = {
  111.     1, 0,                        /* FrontPen / BackPen */
  112.     JAM2,                        /* DrawMode */
  113.     0,                            /* LeftEdge */
  114.     0,                            /* TopEdge */
  115.     &TxtAt_Plain,                /* ITextFont */
  116.     (UBYTE *) "NOW",            /* IText */
  117.     NULL                        /* NextText */
  118.     };
  119.  
  120. static struct Gadget nowgad = {
  121.   &dategad,                         /* NextGadget pointer */
  122.   220, 50,                        /* LeftEdge, TopEdge  */
  123.   24, 8,                        /* Width, Height      */
  124.    GADGHCOMP,                    /* Gadget Flags */
  125.     RELVERIFY ,                 /* Activation Flags */
  126.   REQGADGET | BOOLGADGET,        /* GadgetType */
  127.   NULL,                            /* GadgetRender */
  128.   NULL,                            /* SelectRender */
  129.   &nowtext,                        /* GadgetText */
  130.   0x0,                            /* MutualExclude */
  131.   NULL,                           /* SpecialInfo */
  132.   NOWGAD,                          /* GadgetID */
  133.   NULL                            /* UserData Pointer */
  134. };
  135.  
  136. static struct IntuiText oktext = {
  137.     1, 0,                        /* FrontPen / BackPen */
  138.     JAM2,                        /* DrawMode */
  139.     0,                            /* LeftEdge */
  140.     0,                            /* TopEdge */
  141.     &TxtAt_Plain,                /* ITextFont */
  142.     (UBYTE *) "OK",                        /* IText */
  143.     NULL                        /* NextText */
  144.     };
  145.         
  146. static struct Gadget okgad = {
  147.   &nowgad,                         /* NextGadget pointer */
  148.   30, 50,                        /* LeftEdge, TopEdge  */
  149.   16, 8,                        /* Width, Height      */
  150.    GADGHNONE,                    /* Gadget Flags */
  151.     RELVERIFY ,                 /* Activation Flags */
  152.   REQGADGET | BOOLGADGET,        /* GadgetType */
  153.   NULL,                            /* GadgetRender */
  154.   NULL,                            /* SelectRender */
  155.    &oktext,                        /* GadgetText */
  156.   0x0,                            /* MutualExclude */
  157.   NULL,                           /* SpecialInfo */
  158.   OKGAD,                           /* GadgetID */
  159.   NULL                            /* UserData Pointer */
  160. };
  161.  
  162. /* These coordinate pairs define the border of the up-arrow gadgets. */
  163.  
  164. static SHORT upborder_pairs[] = {
  165.     7, 0,
  166.     14, 7,
  167.     0, 7,
  168.     7, 0
  169.     };
  170.  
  171.  
  172. /* The up-arrow border definition. */
  173.  
  174. static struct Border upborder = {
  175.     -1, -1,    /* LeftEdge, TopEdge */
  176.     1, 2,   /* FrontPen, BackPen */
  177.     JAM1,    /* DrawMode */
  178.     4,         /* number of pairs */
  179.     (SHORT *) &upborder_pairs,
  180.     NULL    /* NextBorder */
  181.     };
  182.  
  183.  
  184. /* These coordinate pairs define the border of the down-arrow gadgets. */
  185.  
  186. static SHORT downborder_pairs[] = {
  187.     0, 0,
  188.     14, 0,
  189.     7, 7,
  190.     0, 0
  191.     };
  192.  
  193. /* The down-arrow border definition. */
  194.  
  195. static struct Border downborder = {
  196.     -1, -1,    /* LeftEdge, TopEdge */
  197.     1, 2,   /* FrontPen, BackPen */
  198.     JAM1,    /* DrawMode */
  199.     4,         /* number of pairs */
  200.     (SHORT *) &downborder_pairs,
  201.     NULL    /* NextBorder */
  202.     };
  203.  
  204.  
  205. /**********************************************************************
  206.  *  Gadget Structure definition for the upsec gadget.
  207.  **********************************************************************/
  208.  
  209. /* Each component of the date and time can be incremented/decremented
  210.  * by clicking on the appropriate up or down arrow gadgets.
  211.  */
  212.  
  213. static struct Gadget downsecgad = {
  214.   &okgad,                         /* NextGadget pointer */
  215.   184, 60,                        /* LeftEdge, TopEdge  */
  216.   15, 8,                        /* Width, Height      */
  217.    NULL,                        /* Gadget Flags */
  218.     RELVERIFY ,                 /* Activation Flags */
  219.   REQGADGET | BOOLGADGET,        /* GadgetType */
  220.   (APTR) &downborder,            /* GadgetRender */
  221.   NULL,                            /* SelectRender */
  222.    NULL,                        /* GadgetText */
  223.   0x0,                            /* MutualExclude */
  224.   NULL,                           /* SpecialInfo */
  225.   DOWNSECGAD,                   /* GadgetID */
  226.   NULL                            /* UserData Pointer */
  227. };
  228.  
  229. /**********************************************************************
  230.  *  Gadget Structure definition for the upmin gadget.
  231.  **********************************************************************/
  232.  
  233. static struct Gadget downmingad = {
  234.   &downsecgad,                     /* NextGadget pointer */
  235.   160, 60,                        /* LeftEdge, TopEdge  */
  236.   15, 8,                        /* Width, Height      */
  237.    NULL,                    /* Gadget Flags */
  238.     RELVERIFY ,                 /* Activation Flags */
  239.   REQGADGET | BOOLGADGET,        /* GadgetType */
  240.   (APTR) &downborder,                /* GadgetRender */
  241.   NULL,                            /* SelectRender */
  242.    NULL,                        /* GadgetText */
  243.   0x0,                            /* MutualExclude */
  244.   NULL,                           /* SpecialInfo */
  245.   DOWNMINGAD,                       /* GadgetID */
  246.   NULL                            /* UserData Pointer */
  247. };
  248.  
  249. /**********************************************************************
  250.  *  Gadget Structure definition for the uphour gadget.
  251.  **********************************************************************/
  252.  
  253. static struct Gadget downhourgad = {
  254.   &downmingad,                     /* NextGadget pointer */
  255.   136, 60,                        /* LeftEdge, TopEdge  */
  256.   15, 8,                        /* Width, Height      */
  257.    NULL,                    /* Gadget Flags */
  258.     RELVERIFY ,                 /* Activation Flags */
  259.   REQGADGET | BOOLGADGET,        /* GadgetType */
  260.   (APTR) &downborder,                /* GadgetRender */
  261.   NULL,                            /* SelectRender */
  262.    NULL,                        /* GadgetText */
  263.   0x0,                            /* MutualExclude */
  264.   NULL,                           /* SpecialInfo */
  265.   DOWNHOURGAD,                       /* GadgetID */
  266.   NULL                            /* UserData Pointer */
  267. };
  268.  
  269. /**********************************************************************
  270.  *  Gadget Structure definition for the upyear gadget.
  271.  **********************************************************************/
  272.  
  273. static struct Gadget downyeargad = {
  274.   &downhourgad,                     /* NextGadget pointer */
  275.   112, 60,                        /* LeftEdge, TopEdge  */
  276.   15, 8,                        /* Width, Height      */
  277.    NULL,                    /* Gadget Flags */
  278.     RELVERIFY ,                 /* Activation Flags */
  279.   REQGADGET | BOOLGADGET,        /* GadgetType */
  280.   (APTR) &downborder,                /* GadgetRender */
  281.   NULL,                            /* SelectRender */
  282.    NULL,                        /* GadgetText */
  283.   0x0,                            /* MutualExclude */
  284.   NULL,                           /* SpecialInfo */
  285.   DOWNYEARGAD,                       /* GadgetID */
  286.   NULL                            /* UserData Pointer */
  287. };
  288.  
  289. /**********************************************************************
  290.  *  Gadget Structure definition for the upday gadget.
  291.  **********************************************************************/
  292.  
  293. static struct Gadget downdaygad = {
  294.   &downyeargad,                     /* NextGadget pointer */
  295.   88, 60,                        /* LeftEdge, TopEdge  */
  296.   15, 8,                        /* Width, Height      */
  297.    NULL,                    /* Gadget Flags */
  298.     RELVERIFY ,                 /* Activation Flags */
  299.   REQGADGET | BOOLGADGET,        /* GadgetType */
  300.   (APTR) &downborder,                /* GadgetRender */
  301.   NULL,                            /* SelectRender */
  302.    NULL,                        /* GadgetText */
  303.   0x0,                            /* MutualExclude */
  304.   NULL,                           /* SpecialInfo */
  305.   DOWNDAYGAD,                       /* GadgetID */
  306.   NULL                            /* UserData Pointer */
  307. };
  308.  
  309. /**********************************************************************
  310.  *  Gadget Structure definition for the upmonth gadget.
  311.  **********************************************************************/
  312.  
  313. static struct Gadget downmonthgad = {
  314.   &downdaygad,     /* NextGadget pointer */
  315.   64, 60,    /* LeftEdge, TopEdge  */
  316.   15, 8,    /* Width, Height      */
  317.   /* Gadget Flags */
  318.    NULL,
  319.     RELVERIFY ,                 /* Activation Flags */
  320.   REQGADGET | BOOLGADGET,        /* GadgetType */
  321.   (APTR) &downborder,                /* GadgetRender */
  322.   NULL,                            /* SelectRender */
  323.    NULL,                        /* GadgetText */
  324.   0x0,                            /* MutualExclude */
  325.   NULL,                           /* SpecialInfo */
  326.   DOWNMONTHGAD,                       /* GadgetID */
  327.   NULL                            /* UserData Pointer */
  328. };
  329.  
  330. /**********************************************************************
  331.  *  Gadget Structure definition for the upsec gadget.
  332.  **********************************************************************/
  333.  
  334. static struct Gadget upsecgad = {
  335.   &downmonthgad,                    /* NextGadget pointer */
  336.   184, 40,                        /* LeftEdge, TopEdge  */
  337.   15, 8,                        /* Width, Height      */
  338.    NULL,                    /* Gadget Flags */
  339.     RELVERIFY ,                 /* Activation Flags */
  340.   REQGADGET | BOOLGADGET,        /* GadgetType */
  341.   (APTR) &upborder,                /* GadgetRender */
  342.   NULL,                            /* SelectRender */
  343.    NULL,                        /* GadgetText */
  344.   0x0,                            /* MutualExclude */
  345.   NULL,                           /* SpecialInfo */
  346.   UPSECGAD,                       /* GadgetID */
  347.   NULL                            /* UserData Pointer */
  348. };
  349.  
  350. /**********************************************************************
  351.  *  Gadget Structure definition for the upmin gadget.
  352.  **********************************************************************/
  353.  
  354. static struct Gadget upmingad = {
  355.   &upsecgad,                     /* NextGadget pointer */
  356.   160, 40,                        /* LeftEdge, TopEdge  */
  357.   15, 8,                        /* Width, Height      */
  358.    NULL,                    /* Gadget Flags */
  359.     RELVERIFY ,                 /* Activation Flags */
  360.   REQGADGET | BOOLGADGET,        /* GadgetType */
  361.   (APTR) &upborder,                /* GadgetRender */
  362.   NULL,                            /* SelectRender */
  363.    NULL,                        /* GadgetText */
  364.   0x0,                            /* MutualExclude */
  365.   NULL,                           /* SpecialInfo */
  366.   UPMINGAD,                       /* GadgetID */
  367.   NULL                            /* UserData Pointer */
  368. };
  369. /**********************************************************************
  370.  *  Gadget Structure definition for the uphour gadget.
  371.  **********************************************************************/
  372.  
  373. static struct Gadget uphourgad = {
  374.   &upmingad,                     /* NextGadget pointer */
  375.   136, 40,                        /* LeftEdge, TopEdge  */
  376.   15, 8,                        /* Width, Height      */
  377.    NULL,                    /* Gadget Flags */
  378.     RELVERIFY ,                 /* Activation Flags */
  379.   REQGADGET | BOOLGADGET,        /* GadgetType */
  380.   (APTR) &upborder,                /* GadgetRender */
  381.   NULL,                            /* SelectRender */
  382.    NULL,                        /* GadgetText */
  383.   0x0,                            /* MutualExclude */
  384.   NULL,                           /* SpecialInfo */
  385.   UPHOURGAD,                       /* GadgetID */
  386.   NULL                            /* UserData Pointer */
  387. };
  388.  
  389. /**********************************************************************
  390.  *  Gadget Structure definition for the upyear gadget.
  391.  **********************************************************************/
  392.  
  393. static struct Gadget upyeargad = {
  394.   &uphourgad,                     /* NextGadget pointer */
  395.   112, 40,                        /* LeftEdge, TopEdge  */
  396.   15, 8,                        /* Width, Height      */
  397.    NULL,                    /* Gadget Flags */
  398.     RELVERIFY ,                 /* Activation Flags */
  399.   REQGADGET | BOOLGADGET,        /* GadgetType */
  400.   (APTR) &upborder,                /* GadgetRender */
  401.   NULL,                            /* SelectRender */
  402.    NULL,                        /* GadgetText */
  403.   0x0,                            /* MutualExclude */
  404.   NULL,                           /* SpecialInfo */
  405.   UPYEARGAD,                       /* GadgetID */
  406.   NULL                            /* UserData Pointer */
  407. };
  408.  
  409. /**********************************************************************
  410.  *  Gadget Structure definition for the upday gadget.
  411.  **********************************************************************/
  412.  
  413. static struct Gadget updaygad = {
  414.   &upyeargad,                     /* NextGadget pointer */
  415.   88, 40,                        /* LeftEdge, TopEdge  */
  416.   15, 8,                        /* Width, Height      */
  417.    NULL,                    /* Gadget Flags */
  418.     RELVERIFY ,                 /* Activation Flags */
  419.   REQGADGET | BOOLGADGET,        /* GadgetType */
  420.   (APTR) &upborder,                /* GadgetRender */
  421.   NULL,                            /* SelectRender */
  422.    NULL,                        /* GadgetText */
  423.   0x0,                            /* MutualExclude */
  424.   NULL,                           /* SpecialInfo */
  425.   UPDAYGAD,                       /* GadgetID */
  426.   NULL                            /* UserData Pointer */
  427. };
  428.  
  429. /**********************************************************************
  430.  *  Gadget Structure definition for the upmonth gadget.
  431.  **********************************************************************/
  432.  
  433. static struct Gadget upmonthgad = {
  434.   &updaygad,     /* NextGadget pointer */
  435.   64, 40,    /* LeftEdge, TopEdge  */
  436.   15, 8,    /* Width, Height      */
  437.   /* Gadget Flags */
  438.    NULL,
  439.     RELVERIFY ,                 /* Activation Flags */
  440.   REQGADGET | BOOLGADGET,        /* GadgetType */
  441.   (APTR) &upborder,                /* GadgetRender */
  442.   NULL,                            /* SelectRender */
  443.    NULL,                        /* GadgetText */
  444.   0x0,                            /* MutualExclude */
  445.   NULL,                           /* SpecialInfo */
  446.   UPMONTHGAD,                       /* GadgetID */
  447.   NULL                            /* UserData Pointer */
  448. };
  449.  
  450. static struct Requester daterequest;    /* requester for the date */
  451.  
  452. /* Date requester border 2 coordinate pairs. */
  453.  
  454. static SHORT datereq_pairs2[] = {
  455.     8, 4, 
  456.     DATEREQWIDTH - 8, 4, 
  457.     DATEREQWIDTH - 8, DATEREQHEIGHT - 4,
  458.     8, DATEREQHEIGHT - 4,
  459.     8, 4
  460. };
  461.  
  462. /* Date requester border 2 definition */
  463.  
  464. static struct Border datereq_bord2 = {
  465.   -1,  -1,       /* LeftEdge, TopEdge */
  466.   0,  2,  JAM2,  /* FrontPen, BackPen, DrawMode*/
  467.   5,             /* Count of XY pairs */  
  468.   (SHORT *)&datereq_pairs2, /* XY pairs */
  469.   NULL           /* Next Border */
  470. };
  471.  
  472. /* Date requester border 1 coordinate pairs. */
  473.  
  474. static SHORT datereq_pairs1[] = {
  475.     4, 2, 
  476.     DATEREQWIDTH - 4, 2, 
  477.     DATEREQWIDTH - 4, DATEREQHEIGHT - 2,
  478.     4, DATEREQHEIGHT - 2,
  479.     4, 2
  480. };
  481.  
  482. /* Date requester border 1 definition. */
  483.  
  484. static struct Border datereq_bord1 = {
  485.   -1,  -1,       /* LeftEdge, TopEdge */
  486.   0,  2,  JAM2,  /* FrontPen, BackPen, DrawMode*/
  487.   5,             /* Count of XY pairs */  
  488.   (SHORT *)&datereq_pairs1, /* XY pairs */
  489.   &datereq_bord2 /* Next Border */
  490. };
  491.  
  492. /* This is the definition for the prompt string (user-supplied) which
  493.  * appears in the requester.
  494.  */
  495.  
  496. static struct IntuiText datereqtext = {
  497.     1, 0,                        /* FrontPen / BackPen */
  498.     JAM2,                        /* DrawMode */
  499.     20,                            /* LeftEdge */
  500.     15,                            /* TopEdge */
  501.     &TxtAt_Plain,                /* ITextFont */
  502.     NULL,                        /* IText */
  503.     NULL                        /* NextText */
  504.     };
  505.  
  506. static initialized = 0;            /* set to 1 after initialization */
  507.  
  508. static InitDateRequest()
  509. {
  510.     InitRequester(&daterequest);
  511.     daterequest.LeftEdge = 60;
  512.     daterequest.TopEdge = 10;
  513.     daterequest.Width = DATEREQWIDTH;
  514.     daterequest.Height = DATEREQHEIGHT;
  515.     daterequest.ReqGadget = &upmonthgad;
  516.     daterequest.ReqText = &datereqtext;
  517.     daterequest.ReqBorder = &datereq_bord1;
  518.     daterequest.BackFill = 2;
  519.     ++initialized;
  520. }
  521.  
  522. /* Request a date from the user.
  523.  * Called with:
  524.  *        window:            pointer to window structure
  525.  *        prompt:            string to be used as the prompt text
  526.  *        default_date:    pointer to default date or NULL
  527.  *        date:            pointer to date result (returned)
  528.  * Returns:
  529.  *        status code:    0 => success, 1 => failure
  530.  *        (actually, always returns 0 - can't leave without good date)
  531.  */
  532.  
  533. DateRequest(window,prompt,default_date,date)
  534.     struct Window *window; char *prompt; 
  535.     struct DateStamp *default_date,*date;
  536. {
  537.     ULONG class;                /* message class */
  538.     USHORT code;                /* message code */
  539.     struct Gadget *gadget;        /* pointer to gadget affected */
  540.     USHORT gadgid;                /* gadget ID */
  541.     struct IntuiMessage *msg;    /* Intuition message pointer */
  542.     UnpackedDS upd;                /* unpacked version of date */
  543.     SHORT x,y;                    /* mouse x and y position */
  544.  
  545.     if (!initialized)
  546.         InitDateRequest();
  547.     datereqtext.IText = (UBYTE *) prompt;
  548.     if (default_date)            /* write default date in requester? */
  549.         DS2Str(dategad_sbuf_1,"%02m/%02d/%02y %02h:%02n:%02s",
  550.             default_date);
  551.     else
  552.         *dategad_sbuf_1 = '\0';
  553.  
  554.     Request(&daterequest, window);
  555.  
  556.     for (;;) {
  557.         Wait(1L << window->UserPort->mp_SigBit);
  558.         while (msg = (struct IntuiMessage *) GetMsg(window->UserPort)) {
  559.             class = msg->Class;
  560.             code = msg->Code;
  561.             gadget = (struct Gadget *) msg->IAddress;
  562.             x = msg->MouseX;
  563.             y = msg->MouseY;
  564.             ReplyMsg(msg);        /* acknowledge the message */
  565.  
  566.             switch (class) {
  567.  
  568.             case REQSET: 
  569.                 ActivateGadget(&dategad,window,&daterequest);
  570.                 break;
  571.             
  572.             case GADGETUP:
  573.                 gadgid = gadget->GadgetID;
  574.                 if (gadgid == NOWGAD)
  575.                     DateStamp(date);
  576.                 else if (gadgid == OKGAD)
  577.                     gadgid = DATEGAD;
  578.  
  579.                 UnpackDS(date, &upd);
  580.  
  581.                 switch (gadgid) {
  582.                 case DATEGAD:
  583.                     if ( ! Str2DS(dategad_sbuf_1, date) ) {
  584.                         EndRequest(&daterequest, window);
  585.                         return 0;
  586.                     }
  587.                     else
  588.                         DisplayBeep(window->WScreen); /* bad conversion */
  589.                     break;
  590.  
  591.                 case UPYEARGAD:
  592.                     ++upd.year;
  593.                     break;
  594.  
  595.                 case DOWNYEARGAD:
  596.                     if (upd.year > 1978) --upd.year;
  597.                     break;
  598.  
  599.                 case UPMONTHGAD:
  600.                     if (++upd.month > 12) upd.month = 1;
  601.                     break;
  602.  
  603.                 case DOWNMONTHGAD:
  604.                     if (--upd.month < 1) upd.month = 12;
  605.                     break;
  606.  
  607.                 case UPDAYGAD:
  608.                     if (upd.day < 31) ++upd.day;
  609.                     break;
  610.  
  611.                 case DOWNDAYGAD:
  612.                     if (upd.day > 1) --upd.day;
  613.                     break;
  614.  
  615.                 case UPHOURGAD:
  616.                     if (++upd.hour > 23) upd.hour = 0;
  617.                     break;
  618.  
  619.                 case DOWNHOURGAD:
  620.                     if (--upd.hour < 0) upd.hour = 23;
  621.                     break;
  622.  
  623.                 case UPMINGAD:
  624.                     if (++upd.minute > 59) upd.minute = 0;
  625.                     break;
  626.  
  627.                 case DOWNMINGAD:
  628.                     if (--upd.minute < 0) upd.minute = 59;
  629.                     break;
  630.  
  631.                 case UPSECGAD:
  632.                     if (++upd.second > 59) upd.second = 0;
  633.                     break;
  634.  
  635.                 case DOWNSECGAD:
  636.                     if (--upd.second < 0) upd.second = 59;
  637.                     break;
  638.  
  639.                 default:
  640.                     break;
  641.                 }                    /* end switch(gadgid) */
  642.  
  643.                 /* Reformat the new date value. */
  644.  
  645.                 PackDS(date, &upd);
  646.                 if (upd.year)
  647.                     DS2Str(dategad_sbuf_1,"%02m/%02d/%02y %02h:%02n:%02s",
  648.                         date);
  649.                 else
  650.                     strcpy(dategad_sbuf_1,"00/00/00 00:00:00");
  651.                 RefreshGadgets(&dategad, window, &daterequest);
  652.                 break;
  653.  
  654.             default:
  655.                 break;            /* ignore the rest */
  656.             }                    /* end switch(class) */
  657.         }
  658.     }
  659. }
  660.  
  661. /*#define DEBUG */
  662.  
  663. #ifdef DEBUG
  664.  
  665. /* --- Only compiled in the debug version --- */
  666.  
  667. #include <exec/memory.h>
  668.  
  669. /* New window structure */
  670.  
  671. struct NewWindow newwindow = {
  672.     0,0,640,200,0,1,
  673.  
  674. /* IDCMP Flags */
  675.  
  676.     MOUSEMOVE | MENUPICK | MOUSEBUTTONS | 
  677.     CLOSEWINDOW | GADGETDOWN | GADGETUP | REQSET, 
  678.  
  679. /* Flags */
  680.     WINDOWCLOSE | WINDOWDEPTH | ACTIVATE | RMBTRAP | REPORTMOUSE,
  681.  
  682.     NULL,                            /* First gadget */
  683.     NULL,                            /* Checkmark */
  684.     (UBYTE *)"Date Requester Test Program",    /* Window title */
  685.     NULL,                            /* No custom streen */
  686.     NULL,                            /* Not a super bitmap window */
  687.     0,0,640,200,                    /* Not used, but set up anyway */
  688.     WBENCHSCREEN
  689. };
  690. struct IntuitionBase *IntuitionBase;
  691. struct Window *mywindow;
  692. struct DateStamp *ds;
  693.  
  694. static struct IntuiText MoreText = {
  695.     AUTOFRONTPEN,                /* FrontPen */
  696.     AUTOBACKPEN,                /* BackPen */
  697.     JAM2,                        /* DrawMode */
  698.     AUTOLEFTEDGE,                /* LeftEdge */
  699.     AUTOTOPEDGE,                /* TopEdge */
  700.     AUTOITEXTFONT,                /* ITextFont */
  701.     (UBYTE *) "Want to play some more?", /* IText */
  702.     NULL                        /* NextText */
  703.     };
  704.  
  705. static struct IntuiText YesText = {
  706.     AUTOFRONTPEN,                /* FrontPen */
  707.     AUTOBACKPEN,                /* BackPen */
  708.     AUTODRAWMODE,                /* DrawMode */
  709.     AUTOLEFTEDGE,                /* LeftEdge */
  710.     AUTOTOPEDGE,                /* TopEdge */
  711.     AUTOITEXTFONT,                /* ITextFont */
  712.     (UBYTE *) "Sure!",             /* IText */
  713.     NULL                        /* NextText */
  714.     };
  715.  
  716. static struct IntuiText NoText = {
  717.     AUTOFRONTPEN,                /* FrontPen */
  718.     AUTOBACKPEN,                /* BackPen */
  719.     JAM2,                        /* DrawMode */
  720.     AUTOLEFTEDGE,                /* LeftEdge */
  721.     AUTOTOPEDGE,                /* TopEdge */
  722.     AUTOITEXTFONT,                /* ITextFont */
  723.     (UBYTE *) "Nope!",             /* IText */
  724.     NULL                        /* NextText */
  725.     };
  726.  
  727. main()
  728. {
  729.     short keep_going;
  730.  
  731.     if (!(IntuitionBase = (struct IntuitionBase *)
  732.         OpenLibrary("intuition.library",33L))) {
  733.         puts("Failed to open Intuition library!");
  734.         exit(1);
  735.     }
  736.  
  737.     ds = (struct DateStamp *)
  738.         AllocMem((long) sizeof(struct DateStamp), MEMF_PUBLIC);
  739.     DateStamp(ds);                /* get current date/time */
  740.  
  741.     mywindow = OpenWindow(&newwindow);
  742.  
  743.     do {
  744.         DateRequest(mywindow, "Enter date and time", ds, ds);
  745.         keep_going = AutoRequest(mywindow, &MoreText, &YesText, &NoText,
  746.                         NULL, NULL, 220L, 50L);
  747.     } while (keep_going);
  748.  
  749.     if (mywindow)
  750.         CloseWindow(mywindow);
  751.  
  752.     if (IntuitionBase)
  753.         CloseLibrary(IntuitionBase);
  754. }
  755.  
  756. #endif
  757.